package br.com.Bolao.application.dao.usuarios;

import br.com.Bolao.application.dao.*;
import br.com.Bolao.model.Usuario;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.TransactionPropagationType;
import org.jboss.seam.annotations.Transactional;

/**
 *
 * @author frederico.cruz
 */
@AutoCreate
@Name("usuarioDAO")
@Transactional(TransactionPropagationType.SUPPORTS)
public class UsuarioDAO extends BaseDAO {

    @In
    private Session bolao;

    public List<Usuario> obterTodos() {
        Criteria c = bolao.createCriteria(Usuario.class);
        return c.list();
    }

    public List<Usuario> obterTodosOrdenadoPontos() {
        Criteria c = bolao.createCriteria(Usuario.class);
        c.addOrder(Order.desc("pontuacao"));
        return c.list();
    }

    public Usuario obterUsuario(String nomeUsuario, String senhaCriptografada) {
        Criteria c = bolao.createCriteria(Usuario.class);
        c.add(Restrictions.eq("login", nomeUsuario));
        c.add(Restrictions.eq("senha", senhaCriptografada));
        Usuario u = (Usuario) c.uniqueResult();
        if (u != null) {
            return u;
        } else {
            return null;
        }
    }

    public Usuario obterPorUsuario(String usuario) {
        Criteria c = bolao.createCriteria(Usuario.class);
        c.add(Restrictions.eq("login", usuario));
        return (Usuario) c.uniqueResult();
    }

     public int obterNumeroUsuarios() {
        Criteria c = bolao.createCriteria(Usuario.class);
        List<Object> lista = c.list();
        return lista.size();
    }

    /**
     * Efetua FLUSH
     * @throws Exception
     */
    public void cancelar() throws Exception {
        try {
            bolao.clear();
            bolao.flush();
        } catch (HibernateException he) {
            throw new Exception(he);
        }
    }
}
